import axios from 'axios'
import { apiConfig } from '@/config'
import { logger } from '@/utils/logger'
import { errorHandler } from '@/utils/error-handler'
import { useAppStore } from '@/stores/app'

// 创建axios实例
const api = axios.create({
  baseURL: apiConfig.baseURL,
  timeout: apiConfig.timeout,
  headers: {
    'Content-Type': 'application/json',
  },
})

// 请求计数器（用于加载状态）
let requestCount = 0

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 增加请求计数
    requestCount++
    const appStore = useAppStore()
    appStore.setLoading(true)
    
    // 记录API调用
    logger.apiCall(config.method, config.url, config.data)
    
    // 添加时间戳防止缓存
    if (config.method === 'get') {
      config.params = {
        ...config.params,
        _t: Date.now(),
      }
    }
    
    return config
  },
  (error) => {
    requestCount--
    if (requestCount === 0) {
      const appStore = useAppStore()
      appStore.setLoading(false)
    }
    
    logger.error('请求配置错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    // 减少请求计数
    requestCount--
    if (requestCount === 0) {
      const appStore = useAppStore()
      appStore.setLoading(false)
    }
    
    // 记录API响应
    logger.apiResponse(response.config.method, response.config.url, response.data)
    
    // 检查业务逻辑错误
    if (response.data && response.data.success === false) {
      const error = new Error(response.data.error?.message || '业务逻辑错误')
      error.response = response
      throw error
    }
    
    // 返回响应数据
    return response.data
  },
  (error) => {
    // 减少请求计数
    requestCount--
    if (requestCount === 0) {
      const appStore = useAppStore()
      appStore.setLoading(false)
    }
    
    // 处理API错误
    const handledError = errorHandler.handleApiError(error)
    
    // 显示错误消息（除了404错误，通常由页面处理）
    if (handledError.type !== 'NOT_FOUND_ERROR') {
      errorHandler.showError(handledError)
    }
    
    return Promise.reject(handledError)
  }
)

export default api
